package com.softer.chengxin.train.service.impl;

import com.softer.chengxin.common.domin.*;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.train.dao.TrainerDao;
import com.softer.chengxin.train.entity.Trainer;
import com.softer.chengxin.train.service.TrainerService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2019/1/19
 */
@Service
public class TrainerServiceImpl implements TrainerService {
    @Autowired
    private TrainerDao trainerDao;

    /**
     * 新增项目经理培训人员
     *
     * @param trainer 培训人员实体
     * @return 新增结果
     */
    @Override
    public CommonResult add(Trainer trainer) {
        //校验项目经理实体
        CommonResult commonResult = checkTrainer(trainer);
        if (ResultEnum.FAIL.getCode() == commonResult.getData()) {
            return commonResult;
        }
        //校验证书编号是否存在
        String code = trainerDao.checkCode(trainer.getCode());
        if (StringUtils.isNotBlank(code)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "证书编号已存在,请确认后添加");
        }
        int num = trainerDao.add(trainer);
        //返回结果
        return returnResult(num);
    }

    /**
     * 删除项目经理培训人员
     *
     * @param id 人员id
     * @return 结果
     */
    @Override
    public CommonResult delete(int id) {
        int num = trainerDao.delete(id);
        //返回结果
        return returnResult(num);
    }

    /**
     * 编辑项目经理培训人员
     *
     * @param trainer 项目经理培训人员
     * @return 编辑结果
     */
    @Override
    public CommonResult edit(Trainer trainer) {
        //校验项目经理实体
        CommonResult commonResult = checkTrainer(trainer);
        if (ResultEnum.FAIL.getCode() == commonResult.getData()) {
            return commonResult;
        }
        Trainer query = trainerDao.query(trainer.getId());
        //如果修改的证书编号与原证书编号不同，校验证书编号
        if (!trainer.getCode().equals(query.getCode())) {
            //校验证书编号是否存在
            String code = trainerDao.checkCode(trainer.getCode());
            if (StringUtils.isNotBlank(code)) {
                return new CommonResult(ResultEnum.FAIL.getCode(), "证书编号已存在,请确认后添加");
            }
        }
        int num = trainerDao.edit(trainer);
        //返回结果
        return returnResult(num);
    }

    /**
     * 查询项目经理培训人员详情
     *
     * @param id 项目经理培训人员ID
     * @return 项目经理培训人员详情
     */
    @Override
    public Trainer query(int id) {
        return trainerDao.query(id);
    }

    /**
     * 查询项目经理培训人员列表
     *
     * @param page    页面信息
     * @param trainer 查询实体
     * @return 列表
     */
    @Override
    public ManagerPageResult queryList(Page page, Trainer trainer) {
        ManagerPageResult mr = new ManagerPageResult();
        JsonResult jr = new JsonResult();
        int num = trainerDao.queryListNum(trainer);
        if (num > Integer.parseInt(Common.ZERO)) {
            List<Trainer> list = trainerDao.queryList(trainer, page);
            return setResult(mr, jr, num, list);
        }
        return setResult(mr, jr, Integer.parseInt(Common.ZERO), new ArrayList());
    }

    /**
     * 查询培训类型下拉列表
     *
     * @return 列表
     */
    @Override
    public List<String> queryTypeList() {
        List<String> list = trainerDao.queryTypeList();
        if (list != null) {
            return list;
        }
        return new ArrayList<>();
    }

    /**
     * 设置返回参数
     *
     * @param mpr  ManagerPageResult
     * @param jr   JsonResult
     * @param num  数量
     * @param list 集合列表
     */
    private ManagerPageResult setResult(ManagerPageResult mpr, JsonResult jr, int num, List list) {
        mpr.setCount(num);
        jr.setDs(list);
        mpr.setJson(jr);
        return mpr;
    }

    /**
     * 校验项目经理实体
     *
     * @param trainer 项目经理实体
     * @return 校验结果
     */
    public CommonResult checkTrainer(Trainer trainer) {

        if (StringUtils.isBlank(trainer.getCode())) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请输入证书编号");
        }
        if (StringUtils.isBlank(trainer.getName())) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请输入姓名");
        }
        return new CommonResult(ResultEnum.SUCCESS.getCode(), Common.OPERATE_SUCCESS);
    }

    /**
     * 返回结果
     *
     * @param num 数量
     * @return 结果
     */
    public CommonResult returnResult(int num) {
        if (num > Integer.parseInt(Common.ZERO)) {
            return new CommonResult(ResultEnum.SUCCESS.getCode(), Common.OPERATE_SUCCESS);
        }
        return new CommonResult(ResultEnum.FAIL.getCode(), Common.OPERATE_FAIL);
    }
}
